package tests;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import objet.Horloge;
import objet.Objet1;
import objet.Point;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import client.MethodCallImpl;

/**
 * Classe de test junit de la partie client
 * @author Kevin Pozderec, Faycal Abka
 *
 */
public class testClient {
	
	MethodCallImpl mdc ;
	
	@Before
	public void setUp() throws Exception {
		mdc = new MethodCallImpl();
	}

	@After
	public void tearDown() throws Exception {
		mdc = null;
	}

	/**MethodCallImpl*/
	
	@Test
	public void testValidationRNG_OK() {
		String chaine_xml_valide = "<methodCall><methodName>test</methodName><params><param><value>void</value></param></params></methodCall>";
		assertTrue(mdc.ValidationRNG(chaine_xml_valide));
		
		chaine_xml_valide = "<methodCall><methodName>test</methodName><params><param><value><boolean>0</boolean></value></param><param><value>texte</value></param></params></methodCall>";
		assertTrue(mdc.ValidationRNG(chaine_xml_valide));
	}	
	
	@Test
	public void testValidationRNG_NOK() {
		/*Mauvaise balise de fermeture de methodName*/
		String chaine_xml_invalide = "<methodCall><methodName>test</ERROR><params><param><value>void</value></param></params></methodCall>";
		assertFalse(mdc.ValidationRNG(chaine_xml_invalide));
		
		/*Valeur boolean erronée*/
		chaine_xml_invalide = "<methodCall><methodName>test</methodName><params><param><value><boolean>8</boolean></value></param><param><value>texte</value></param></params></methodCall>";
		assertFalse(mdc.ValidationRNG(chaine_xml_invalide));
	}	
	
	@Test
	public void testTestXMLRMISerializable_OK(){
		Point p = new Point(1, 2);
		assertTrue(mdc.testXMLRMISerializable(p.getClass()));
		
		Horloge h = new Horloge();
		assertTrue(mdc.testXMLRMISerializable(h.getClass()));		
	}
	
	@Test
	public void testTestXMLRMISerializable_NOK(){	
		Object o = new Object();
		assertFalse(mdc.testXMLRMISerializable(o.getClass()));
	}
	
	
	/**Si vous démarrer le serveur vous pourrez voir l'execution des différents methodCall possible,
	 * Sinon le test vérifiera que le programme se termine même si la communication n'est pas possible
	 */
	
	@Test
	public void testPointMoveCall(){
		/*Vérification de l'execution d'un methodCall sans serveur*/
		mdc.pointMoveCall(new Point(1,2),4,6);
	}
	
	
	@Test
	public void testUseObject1Call(){
		/*Vérification de l'execution d'un methodCall sans serveur*/
		mdc.useObject1Call(new Objet1(), 2,false,"dede",125.5);
	}
	
	@Test
	public void testPingDateCall(){
		/*Vérification de l'execution d'un methodCall sans serveur*/
		mdc.pingDateCall(new Horloge());
	}

	/**Fin MethodCallImpl*/
	

}
